package com.app.java.io;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 * I/O流的经典使用方式：缓冲输入文件.
 * @author User
 *
 */
public class BufferedInputFile {
	public static String read(String fileName) throws IOException{
		// Reading input by lines :
		BufferedReader br = new BufferedReader(new FileReader(fileName));
		
		String s;
		// StringBuilder提供一个与 StringBuffer 兼容的 API，但不保证同步。
		// StringBuilder 被设计用作 StringBuffer 的一个简易替换，
		// 用在字符串缓冲区被单个线程使用的时候（这种情况很普遍）。
		// 如果可能，建议优先采用该类，因为在大多数实现中，它比 StringBuffer 要快。
		// StringBuffer 是线程安全的可变字符序列，支持同步。
		StringBuilder sb = new StringBuilder();
		
		while((s = br.readLine()) != null)
			// 字符串sb用来积累文件的全部内容（包括必须添加的换行符，因为readLine()已将它们删掉）.
			sb.append(s).append("\n");
		
		return sb.toString();
	}

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// 文件 readme.txt 在工程的根目录下
		System.out.println(BufferedInputFile.read("readme.txt"));

	}

}